<?php

/**
 * descripcionesgenerales actions.
 *
 * @package    SistemaWebUnlSenescyt
 * @subpackage descripcionesgenerales
 * @author     JFernando
 * @version    SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
class descripcionesgeneralesActions extends sfActions {

    public function executeGraba(sfWebRequest $request) {


        if (isset($_POST['id']) && isset($_POST['firstname']) && isset($_POST['lastname'])) {
            $id = mysql_escape_String($_POST['id']);
            $firstname = mysql_escape_String($_POST['firstname']);
            $lastname = mysql_escape_String($_POST['lastname']);

            $q = Doctrine_Query::create()
                    ->from('descripciongeneral d')
                    ->where('d.id_dg = ?', $id);
            $de = $q->fetchOne();
            $de->setCodigo($firstname);
            $de->setNombre($lastname);
            $de->save();
        }
    }

    public function executeIndex(sfWebRequest $request) {
        $this->idtp = $request->getParameter('id_tp');
        $this->getUser()->setAttribute('id_tp', $this->idtp);

        $this->descripcions = Doctrine::getTable('descripciongeneral')->createQuery('d')
                ->where('d.id_tp = ?', $this->idtp)
                ->execute();

        $q1 = Doctrine_Query::create()
                ->from('techos t')
                ->where('t.id_tp=?', $this->idtp);
        $this->rubro = $q1->fetchOne();
        //$this->pro = $this->getUser()->getAttribute('id_pro');
        $this->pro =$request->getParameter('id_pro');
        $q3 = Doctrine_Query::create()
                ->from('proyecto p')
                ->where('p.id_pro=?', $this->pro);
        $this->proyecto = $q3->fetchOne();
    }

    public function executeShow(sfWebRequest $request) {
        $this->descripciongeneral = Doctrine_Core::getTable('descripciongeneral')->find(array($request->getParameter('id_dg')));
        $this->forward404Unless($this->descripciongeneral);
    }

    public function executeNew(sfWebRequest $request) {
        $this->idtp = $request->getParameter('id_tp');
        $this->pro =$request->getParameter('id_pro');
        $this->getUser()->setAttribute('id_pro', $this->pro);
        $this->getUser()->setAttribute('id_tp', $this->idtp);
        $this->form = new descripciongeneralForm();
    }

    public function executeCreate(sfWebRequest $request) {
        $this->forward404Unless($request->isMethod(sfRequest::POST));

        $this->form = new descripciongeneralForm();

        $this->processForm($request, $this->form);

        $this->setTemplate('new');
    }

    public function executeEdit(sfWebRequest $request) {
        $this->forward404Unless($descripciongeneral = Doctrine_Core::getTable('descripciongeneral')->find(array($request->getParameter('id_dg'))), sprintf('Object descripciongeneral does not exist (%s).', $request->getParameter('id_dg')));
        $this->form = new descripciongeneralForm($descripciongeneral);
    }

    public function executeUpdate(sfWebRequest $request) {
        $this->forward404Unless($request->isMethod(sfRequest::POST) || $request->isMethod(sfRequest::PUT));
        $this->forward404Unless($descripciongeneral = Doctrine_Core::getTable('descripciongeneral')->find(array($request->getParameter('id_dg'))), sprintf('Object descripciongeneral does not exist (%s).', $request->getParameter('id_dg')));
        $this->form = new descripciongeneralForm($descripciongeneral);

        $this->processForm($request, $this->form);

        $this->setTemplate('edit');
    }

    public function executeDelete(sfWebRequest $request) {
        $request->checkCSRFProtection();

        $this->forward404Unless($descripciongeneral = Doctrine_Core::getTable('descripciongeneral')->find(array($request->getParameter('id_dg'))), sprintf('Object descripciongeneral does not exist (%s).', $request->getParameter('id_dg')));
        $aux = $descripciongeneral->getIdDg();
        $aux2 = $descripciongeneral->getIdPro();
        $descripciongeneral->delete();


        $vau = Doctrine::getTable('valor')->createQuery('v')
                ->where('v.id_dg=?', $aux)
                ->execute();
        foreach ($vau as $vu) :
            $vu->delete();
        endforeach;
        $this->redirect('descripcionesgenerales/index?id_tp=' . $aux.'&id_pro='. $aux2);
        
    }

    protected function processForm(sfWebRequest $request, sfForm $form) {
        $form->bind($request->getParameter($form->getName()), $request->getFiles($form->getName()));
        if ($form->isValid()) {
            $form->getObject()->setIdPro($this->getUser()->getAttribute('id_pro'));
            $form->getObject()->setIdTp($this->getUser()->getAttribute('id_tp'));
            $descripciongeneral = $form->save();

            $objetivos = Doctrine::getTable('objetivo')->createQuery('o')
                    ->where('o.id_pro=?', $this->getUser()->getAttribute('id_pro'))
                    ->execute();
            $crea = false;
            if (count($objetivos) >= 0) {
                foreach ($objetivos as $obs) :
                    $actividades = Doctrine::getTable('actividad')->createQuery('a')
                            ->where('a.id_ob=?', $obs->getIdOb())
                            ->execute();
                endforeach;
                if (count($actividades) >= 0) {
                    $crea = true;
                } else {
                    $crea = false;
                }
            } else {
                $crea = false;
            }
            if ($crea == true) {
                $fondospro = Doctrine::getTable('fondo')->createQuery('f')
                        ->where('f.id_pro=?', $this->getUser()->getAttribute('id_pro'))
                        ->execute();
                if (count($fondospro) == 1) {
                    $q2 = Doctrine_Query::create()
                            ->from('fondo f')
                            ->where('f.id_pro=?', $this->getUser()->getAttribute('id_pro'))
                            ->andWhere('f.defecto = 1');
                    $fd = $q2->fetchOne();
                    $idfd = $fd->getIdFo();
                    foreach ($objetivos as $ob) :


                        $actividades = Doctrine::getTable('actividad')->createQuery('a')
                                ->where('a.id_ob=?', $ob->getIdOb())
                                ->execute();

                        foreach ($actividades as $ac) :
                            $fi = explode("-", $ob->getPeriodos()->getFechai());
                            $ff = explode("-", $ob->getPeriodos()->getFechaf());
                            $ai = $fi[0];
                            $mi = $fi[1];
                            $af = $ff[0];
                            $mf = $ff[1];
                            if ($ai == $af) {
                                while ($mi <= $mf) {
                                    $valorfd = new Valor();
                                    $valorfd->setIdDg($descripciongeneral->getIdDg());
                                    $valorfd->setIdAc($ac->getIdAc());
                                    $valorfd->setMes($mi);
                                    $valorfd->setAnio($ai);
                                    $valorfd->setVal(0.00);
                                    $valorfd->setIdFo($idfd);
                                    $valorfd->save();


                                    $mi = $mi + 1;
                                }
                            } else {
                                //caso 2
                                //cuando el periodo es superior a 2 anios 
                                $totalanios = $af - $ai;
                                if ($totalanios == 1) {

                                    while ($mi <= 12) {
                                        $valorfd = new Valor();
                                        $valorfd->setIdDg($descripciongeneral->getIdDg());
                                        $valorfd->setIdAc($ac->getIdAc());
                                        $valorfd->setIdFo($idfd);
                                        $valorfd->setMes($mi);
                                        $valorfd->setAnio($ai);
                                        $valorfd->setVal(0.00);
                                        $valorfd->save();




                                        $mi = $mi + 1;
                                    }
                                    $aux = 1;
                                    while ($aux <= $mf) {

                                        $valorfd = new Valor();
                                        $valorfd->setIdDg($descripciongeneral->getIdDg());
                                        $valorfd->setIdAc($ac->getIdAc());
                                        $valorfd->setIdFo($idfd);
                                        $valorfd->setMes($aux);
                                        $valorfd->setAnio($af);
                                        $valorfd->setVal(0.00);
                                        $valorfd->save();




                                        $aux++;
                                    }
                                } else {
                                    //caso 3
                                    //cuando el periodo es superior a 3 anios 

                                    if ($totalanios > 1) {

                                        while ($mi <= 12) {
                                            $valorfd = new Valor();
                                            $valorfd->setIdDg($descripciongeneral->getIdDg());
                                            $valorfd->setIdAc($ac->getIdAc());
                                            $valorfd->setIdFo($idfd);
                                            $valorfd->setMes($mi);
                                            $valorfd->setAnio($ai);
                                            $valorfd->setVal(0.00);
                                            $valorfd->save();



                                            $mi = $mi + 1;
                                        }

                                        $auxai = $ai + 1;
                                        $auxaf = $af - 1;
                                        while ($auxai <= $auxaf) {
                                            for ($i = 1; $i <= 12; $i++) {
                                                $valorfd = new Valor();
                                                $valorfd->setIdDg($descripciongeneral->getIdDg());
                                                $valorfd->setIdAc($ac->getIdAc());
                                                $valorfd->setIdFo($idfd);
                                                $valorfd->setMes($i);
                                                $valorfd->setAnio($auxai);
                                                $valorfd->setVal(0.00);
                                                $valorfd->save();
                                            }
                                            $auxai = $auxai + 1;
                                        }
                                        $aux = 1;
                                        while ($aux <= $mf) {
                                            $valorfd = new Valor();
                                            $valorfd->setIdDg($descripciongeneral->getIdDg());
                                            $valorfd->setIdAc($ac->getIdAc());
                                            $valorfd->setIdFo($idfd);
                                            $valorfd->setMes($aux);
                                            $valorfd->setAnio($af);
                                            $valorfd->setVal(0.00);
                                            $valorfd->save();



                                            $aux++;
                                        }
                                    }
                                }
                            }
                        endforeach;
                    endforeach;
                } else {
                    $q1 = Doctrine_Query::create()
                            ->from('fondo f')
                            ->where('f.id_pro=?', $this->getUser()->getAttribute('id_pro'))
                            ->andWhere('f.defecto = 0');
                    $fc = $q1->fetchOne();
                    $idfc = $fc->getIdFo();
                    $q2 = Doctrine_Query::create()
                            ->from('fondo f')
                            ->where('f.id_pro=?', $this->getUser()->getAttribute('id_pro'))
                            ->andWhere('f.defecto = 1');
                    $fd = $q2->fetchOne();
                    $idfd = $fd->getIdFo();

                    foreach ($objetivos as $ob) :


                        $actividades = Doctrine::getTable('actividad')->createQuery('a')
                                ->where('a.id_ob=?', $ob->getIdOb())
                                ->execute();

                        foreach ($actividades as $ac) :
                            $fi = explode("-", $ob->getPeriodos()->getFechai());
                            $ff = explode("-", $ob->getPeriodos()->getFechaf());
                            $ai = $fi[0];
                            $mi = $fi[1];
                            $af = $ff[0];
                            $mf = $ff[1];
                            if ($ai == $af) {
                                while ($mi <= $mf) {
                                    $valorfd = new Valor();
                                    $valorfd->setIdDg($descripciongeneral->getIdDg());
                                    $valorfd->setIdAc($ac->getIdAc());
                                    $valorfd->setMes($mi);
                                    $valorfd->setAnio($ai);
                                    $valorfd->setVal(0.00);
                                    $valorfd->setIdFo($idfd);
                                    $valorfd->save();

                                    $valorfc = new Valor();
                                    $valorfc->setIdDg($descripciongeneral->getIdDg());
                                    $valorfc->setIdAc($ac->getIdAc());
                                    $valorfc->setMes($mi);
                                    $valorfc->setAnio($ai);
                                    $valorfc->setVal(0.00);
                                    $valorfc->setIdFo($idfc);
                                    $valorfc->save();
                                    $mi = $mi + 1;
                                }
                            } else {
                                //caso 2
                                //cuando el periodo es superior a 2 anios 
                                $totalanios = $af - $ai;
                                if ($totalanios == 1) {

                                    while ($mi <= 12) {
                                        $valorfd = new Valor();
                                        $valorfd->setIdDg($descripciongeneral->getIdDg());
                                        $valorfd->setIdAc($ac->getIdAc());
                                        $valorfd->setIdFo($idfd);
                                        $valorfd->setMes($mi);
                                        $valorfd->setAnio($ai);
                                        $valorfd->setVal(0.00);
                                        $valorfd->save();

                                        $valorfc = new Valor();
                                        $valorfc->setIdDg($descripciongeneral->getIdDg());
                                        $valorfc->setIdAc($ac->getIdAc());
                                        $valorfc->setIdFo($idfc);
                                        $valorfc->setMes($mi);
                                        $valorfc->setAnio($ai);
                                        $valorfc->setVal(0.00);
                                        $valorfc->save();


                                        $mi = $mi + 1;
                                    }
                                    $aux = 1;
                                    while ($aux <= $mf) {

                                        $valorfd = new Valor();
                                        $valorfd->setIdDg($descripciongeneral->getIdDg());
                                        $valorfd->setIdAc($ac->getIdAc());
                                        $valorfd->setIdFo($idfd);
                                        $valorfd->setMes($aux);
                                        $valorfd->setAnio($af);
                                        $valorfd->setVal(0.00);
                                        $valorfd->save();

                                        $valorfc = new Valor();
                                        $valorfc->setIdDg($descripciongeneral->getIdDg());
                                        $valorfc->setIdAc($ac->getIdAc());
                                        $valorfc->setIdFo($idfc);
                                        $valorfc->setMes($aux);
                                        $valorfc->setAnio($af);
                                        $valorfc->setVal(0.00);
                                        $valorfc->save();


                                        $aux++;
                                    }
                                } else {
                                    //caso 3
                                    //cuando el periodo es superior a 3 anios 

                                    if ($totalanios > 1) {

                                        while ($mi <= 12) {
                                            $valorfd = new Valor();
                                            $valorfd->setIdDg($descripciongeneral->getIdDg());
                                            $valorfd->setIdAc($ac->getIdAc());
                                            $valorfd->setIdFo($idfd);
                                            $valorfd->setMes($mi);
                                            $valorfd->setAnio($ai);
                                            $valorfd->setVal(0.00);
                                            $valorfd->save();

                                            $valorfc = new Valor();
                                            $valorfc->setIdDg($descripciongeneral->getIdDg());
                                            $valorfc->setIdAc($ac->getIdAc());
                                            $valorfc->setIdFo($idfc);
                                            $valorfc->setMes($mi);
                                            $valorfc->setAnio($ai);
                                            $valorfc->setVal(0.00);
                                            $valorfc->save();

                                            $mi = $mi + 1;
                                        }

                                        $auxai = $ai + 1;
                                        $auxaf = $af - 1;
                                        while ($auxai <= $auxaf) {
                                            for ($i = 1; $i <= 12; $i++) {
                                                $valorfd = new Valor();
                                                $valorfd->setIdDg($descripciongeneral->getIdDg());
                                                $valorfd->setIdAc($ac->getIdAc());
                                                $valorfd->setIdFo($idfd);
                                                $valorfd->setMes($i);
                                                $valorfd->setAnio($auxai);
                                                $valorfd->setVal(0.00);
                                                $valorfd->save();

                                                $valorfc = new Valor();
                                                $valorfc->setIdDg($descripciongeneral->getIdDg());
                                                $valorfc->setIdAc($ac->getIdAc());
                                                $valorfc->setIdFo($idfc);
                                                $valorfc->setMes($i);
                                                $valorfc->setAnio($auxai);
                                                $valorfc->setVal(0.00);
                                                $valorfc->save();
                                            }
                                            $auxai = $auxai + 1;
                                        }
                                        $aux = 1;
                                        while ($aux <= $mf) {
                                            $valorfd = new Valor();
                                            $valorfd->setIdDg($descripciongeneral->getIdDg());
                                            $valorfd->setIdAc($ac->getIdAc());
                                            $valorfd->setIdFo($idfd);
                                            $valorfd->setMes($aux);
                                            $valorfd->setAnio($af);
                                            $valorfd->setVal(0.00);
                                            $valorfd->save();

                                            $valorfc = new Valor();
                                            $valorfc->setIdDg($descripciongeneral->getIdDg());
                                            $valorfc->setIdAc($ac->getIdAc());
                                            $valorfc->setIdFo($idfc);
                                            $valorfc->setMes($aux);
                                            $valorfc->setAnio($af);
                                            $valorfc->setVal(0.00);
                                            $valorfc->save();

                                            $aux++;
                                        }
                                    }
                                }
                            }
                        endforeach;
                    endforeach;
                }
            }
            $this->getUser()->setFlash('notice', 'Descripción Guardada Correctamente!');
            $this->redirect('descripcionesgenerales/index?id_tp=' . $descripciongeneral->getIdTP().'&id_pro='. $descripciongeneral->getIdPro());
        }
    }

}
